import { ref } from 'vue';
import { useDictStore } from '@/store/modules/dict/index';
import type { DictDataOption, DictType } from '@/typings/global';
import { getDicts } from '@/service/api/developer/dictData';
/** 获取字典数据 */
export const useDict = (...args: string[]): { [key: string]: DictDataOption[] } => {
  const res = ref<{
    [key: string]: DictDataOption[];
  }>({});
  return (() => {
    args.forEach(async dictType => {
      res.value[dictType] = [];
      const dicts = useDictStore().getDict(dictType);
      if (dicts) {
        res.value[dictType] = dicts;
      } else {
        await getDicts(dictType).then(({ data: resp }) => {
          // @ts-expect-error ignore 忽略该错误
          res.value[dictType] = resp?.data?.map(
            (p: any): DictDataOption => ({
              label: p.dictLabel,
              value: p.dictValue,
              type: convertType(p.listClass),
              class: p.cssClass
            })
          );
          useDictStore().setDict(dictType, res.value[dictType]);
        });
      }
    });
    return res.value;
  })();
};

const convertType = (type: string): DictType => {
  if (type === 'danger') {
    // @ts-expect-error ignore 忽略该错误
    return 'error';
  }
  // @ts-expect-error ignore 忽略该错误
  return type;
};
